package com.example.yupao.common;

import lombok.Data;

import java.io.Serializable;

/**
 * 通用返回类, 统一返回给前端的对象, 实现 Serializable 接口
 *
 * @param <T>  泛型参数
 * @author 宝儿姐
 */
@Data
public class BaseResponse<T> implements Serializable {

    /**
     * 返回给前端用来标识具体的成功与否
     */
    private int code;

    /**
     * 数据
     * 泛型是可以接受各种各样的参数类型
     */
    // private String data;
    private T data;

    /**
     * 成功, 错误信息
     */
    private String message;

    /**
     * 描述信息（详细）
     */
    private String description;

    /**
     *  构造方法中不带泛型<T>
     *
     * @param code
     * @param data
     * @param message
     * @param description
     */
    public BaseResponse(int code, T data, String message, String description) {
        this.code = code;
        this.data = data;
        this.message = message;
        this.description = description;
    }

    public BaseResponse(int code, T data, String message) {
        this(code, data, message, "");
    }

    public BaseResponse(int code, T data) {
        // this.code = code;
        // this.data = data;
        // this.message = "";
        // this.description = "";
        // 这是表示调用其他的构造方法, 必须放在第一行， 上面那种写法也是可以的
        this(code, data, "", "");
    }


    public BaseResponse(ErrorCode errorCode) {
        this(errorCode.getCode(), null, errorCode.getMessage(), errorCode.getDescription());
    }

/*    public BaseResponse(ErrorCode errorCode, String message, String description) {
        this(errorCode.getCode(), null, message, description);
    }

    public BaseResponse(ErrorCode errorCode, String description) {
        this(errorCode.getCode(), null, errorCode.getMessage(), description);
    }*/

}
